﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;

namespace ControleFinanceiro.Dominio.Entidades
{
  public class Conta : Entidade
  {
    public string Numero { get; protected set; }
    public string Agencia { get; protected set; }
    public double Saldo { get; protected set; }
    public Banco Banco { get; protected set; }

    public Conta(Banco banco, string numero, string agencia)
    {
      Contract.Requires(!String.IsNullOrWhiteSpace(numero));
      Contract.Requires(!String.IsNullOrWhiteSpace(agencia));

      this.Agencia = agencia;
      this.Numero = numero;
      this.Banco = banco;
    }

    public Conta(Banco banco, string numero, string agencia, double Saldo) : this(banco,numero,agencia)
    {
      this.Saldo = Saldo;
    }

    public void Creditar(double valor)
    {
      this.Saldo += valor;
    }

    public void Debitar(double valor)
    {
      if (valor > this.Saldo)
        throw new SaldoInvalidoException();

      this.Saldo -= valor;
    }
  }

  public class SaldoInvalidoException : Exception
  {
    public SaldoInvalidoException()
      : base("O saldo não pode ficar negativo!") { }
  }
}
